import org.kwis.msp.lcdui.*;
import org.kwis.msp.lwc.*;

public class Paddle implements GameConstants
{
	private int x, y;
	private Image img = null;

	public Paddle(int startX, int startY)
	{
		x = startX ;
		y = startY ;

		try
		{
			img = Image.createImage("paddle.png");
		}
		catch (Exception e)
		{	
			e.printStackTrace();
		}
	}

	// Paddle을 파라이터에서 주어진 위치로 움직인다.
	public void paddleSetToPos(int px, int py)
	{
		x = px;
		y = py;
	}
	// x,y 좌표는 Paddle의 왼쪽 상단이다.

	// Paddle의 X 좌표를 가져온다.
	public int getX()
	{
		return x;
	}

	// Paddle의 Y 좌표를 가져온다.
	public int getY()
	{
		return y;
	}

	// Paddle 이 왼쪽으로 이동을 할때
	public void moveLeft()
	{
		x -= PADDLE_MOVE_LVL1;

		// 만약 Paddle이 화면왼쪽 경계을 지나치려 하면
		// 화면 왼쪽 경계에서 못나가게 한다.
		if (x < 0) {
			x = 0;
		}
	}

	// Paddle 이 오른쪽으로 이동을 할때
	public void moveRight()
	{
		x += PADDLE_MOVE_LVL1;

		// 만약 Paddle이 화면오른쪽 경계을 지나치려 하면
		// 화면 오른쪽 경계에서 못나가게 한다.

		if (x+PADDLE_WIDTH > MAX_WIDTH)
		{
			x = MAX_WIDTH - PADDLE_WIDTH;
		}
	
	}

	// 공과의 HitTest를 실행한다.
	// return 값
	// PADDLE_HIT_NONE : Hit가 되지 않았을경우
	// PADDLE_HIT_NORMAL : Paddle의 윗부분에 Hit가 되었을경우
	// PADDLE_HIT_EDGE : Paddle의 옆부분에 Hit가 되었을경우
	public int hitTest(int ballX, int ballY, int deltaX, int deltaY)
	{
		if ( ballY+BALL_DIAMETER >= y)
		{
			int ballCX = ballX+BALL_RADIUS;
			if(ballCX >= x-BALL_RADIUS && ballCX <= (x+PADDLE_WIDTH+BALL_RADIUS)) {
				if(ballCX >= x-BALL_RADIUS && ballCX <= x+BALL_RADIUS/2) 
					return PADDLE_HIT_EDGE;
				else if(x+PADDLE_WIDTH-BALL_RADIUS/2 <= ballCX && ballCX <= x+PADDLE_WIDTH+BALL_RADIUS)
					return PADDLE_HIT_EDGE;
				else 
					return PADDLE_HIT_NORMAL;
			}
		}
		return PADDLE_HIT_NONE;
	}

	// Paddle을 그려준다.
	public void paint(Graphics g)
	{
		g.drawImage(img,x,y,Graphics.TOP);
	}
};